MST
์ ํฌ๋ฃจ์ค์นผ๊ณผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์์ ์ ์ฉํ๊ฒ ์ฐ์ด๋ Disjoint Set
์ ๋ํ ๊ฐ๋จํ ์ ๋ฆฌ
struct DisjointSet {int parent[SIZE];int rank[SIZE];void init() {for(int i = 0; i < SIZE; ++i) {parent[i] = i;rank[i] = 0;}}int getRoot(int v) {if (v == parent[v]) return v;return parent[v] = getRoot(parent[v]);}void merge(int a, int b) {int a = getRoot(a);int b = getRoot(b);if (a == b) return; // already mergedparent[b] = a;}};
๋ธ๋ก๊ทธ๋ ์ฑ
์ฐพ์๋ณด๋ฉด Rank
์ Path Compression
์ ๋ ๋ค ์ฌ์ฉํ๋ฉด ์ ์ปค๋ง ํจ์๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฑฐ์ ๊ณผ ์ ์ฌํ ์๊ฐ๋ณต์ก๋๊ฐ ๋์จ๋ค๊ณ ํ์ง๋ง, ์ ์ฝ๋์ฒ๋ผ Path Compression
๋ง ๊ตฌํํ๋ ๊ฒ๋ ์ด ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์ ์ด ์ ๋๋ง ํด๋ฌ๋ ๋๋ค๊ณ ์๊ฐํ๋ค. ์ด์ฐจํผ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํฉ์ณ์ ์ธ ๊ฒ์ธ๋ฐ(Union Find
๋ง์ผ๋ก ๋ ๋ฌธ์ ๋ ์ ์์ผ๋ฏ๋ก..), ์ด ๊ฒฝ์ฐ์ ์ ์ด์ฐจํผ base์ ๊ฐ๊น์ด ์๊ฐ๋ณต์ก๋์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ๊น์ง ์ค์ผ ํ์๋ ์๋ค๊ณ ๋ณธ๋ค.